Script : 10_calcul_indicateurs_par_ope
Pour rappel, cette étude se divise en plusieurs parties. Dans un premier temps, il s’agit de produire un tableau de bord combinant divers indicateurs simples, à l’échelle de chaque opération de pêche.
Les pré-traitements nécessaires à la constitution de ce tableau de bord ont été réalisés dans les scripts précédents. Ce script permet donc la création du tableau de bord comportant plusieurs indicateurs dits “simples” afin d’observer les tendances démographiques des espèces. Ces indicateurs (densités volumiques, densités surfaciques, pourcentage de juvéniles, longueurs médianes,…) seront calculés à l’échelle des opérations de pêches retenues pour l’étude. Ces indicateurs sont calculés par espèce et par stade (juv / ad), mais également pour l’ensemble des individus (ind).
library(tidyverse)
library(aspe)
Nous avons besoin des jeux de données constitués lors des précédents scripts.
load(file = "../processed_data/selection_pop_ope.rda") ## Chargement des données pré-enregistrées ----
load(file = "../processed_data/pre_traitements_donnees_env.rda")
load(file = "../processed_data/analyse_selection_especes.rda")
load(file = "../processed_data/pre_traitements_donnees_especes.rda")
rdata_tables <- misc_nom_dernier_fichier(
repertoire = "../../../../projets/ASPE/raw_data/rdata",
pattern = "^tables")
load(rdata_tables)
source(file = "../R/calcul_biomasse.R")
source(file = "../R/calcul_50_percentile.R")
source(file = "../R/calcul_ecart_interquartile.R")
source(file = "../R/calcul_25_percentile.R")
source(file = "../R/calcul_75_percentile.R")
source(file = "../R/calcul_densite_surface.R")
Plusieurs indicateurs simples témoignants de la dynamique de population des poissons d’eau douce sont calculés dans un premier temps à l’opération de pêche.
Les effectifs totaux de chacune des espèces sur chaque opération de pêches (ope_id) sont calculés à partir du jeu de données mei_ope_selection. Dans un premier temps, le calcul s’effectue sur l’ensemble des données (sans distinction de stade).
NB : Nous considerons les éventuels NA en mei_id précédemment repérés dans le script 04_pre_traitements_donnees_ope_especes (et nous leurs affectons les données d’effectifs du lop_id correspondant).
ope_effectif_ind <- mei_ope_selection %>%
mutate(valeur_effectif = ifelse(startsWith(mei_id, "na_vigilance"), lop_effectif, 1)) %>% # Remplace les valeurs commençant par "na_vigilance" par lop_effectif
group_by(ope_id, esp_code_alternatif) %>%
summarise(valeur = sum(valeur_effectif),
.groups = 'drop') %>%
mutate(indicateur = "effectif_total",
stade = "ind") %>%
select(ope_id,
esp_code_alternatif,
indicateur,
valeur,
stade)
Dans un second temps, l’indicateur est calculé par stade (juvénile et adulte).
ope_effectif_stade <- mei_ope_selection %>%
mutate(valeur_effectif = ifelse(startsWith(mei_id, "na_"), lop_effectif, 1)) %>% # Remplace les valeurs commençant par "na_" par lop_effectif
group_by(ope_id,
esp_code_alternatif,
stade) %>%
summarise(valeur = sum(valeur_effectif),
indicateur = "effectif_total",
.groups = 'drop') %>%
select(ope_id,
esp_code_alternatif,
indicateur,
valeur,
stade)
ope_effectif <- rbind (ope_effectif_ind,
ope_effectif_stade)
Nous avons donc une première version des effectifs sans avoir inclut les absences. Les absences des espèces correspondent au cas où une espèce a déjà été interceptée sur une station lors d’une année de pêche, mais qu’elle n’y a pas été retrouvée lors des années suivantes.
Création d’un dataframe avec toutes les combinaisons possibles d’ope_id, esp_code_alternatif et années présentes dans les données ; et ajout des NA :
ope_effectif_ind <- ope_effectif_ind %>%
left_join(ope_selection) %>%
select(-sta_id,
-pro_libelle,
-ope_date,
-pop_libelle)
ope_full <- mef_ajouter_abs(ope_effectif_ind,
var_id = ope_id,
var_taxon = esp_code_alternatif,
var_effectif = valeur)
ope_effectif_absences <- ope_full %>%
mutate(valeur = ifelse(is.na(valeur), 0, valeur),
indicateur = 'effectif_total',
stade = "ind") %>%
select(ope_id,
esp_code_alternatif,
indicateur,
valeur,
stade)
Les biomasses de chacune des espèces sur chaque opération de pêches (ope_id) sont calculées à partir du jeu de données mei_ope_selection. Dans un premier temps, l’ensemble des stades sont gardés.
ope_biomasse <- mei_ope_selection %>% # Calcul de la biomasse par opération sans distinction de stade
group_by(ope_id,
esp_code_alternatif,
stade) %>%
summarise(valeur=sum(poids_tp, na.rm = TRUE)) %>%
mutate(indicateur= "biomasse") %>%
select(ope_id,
esp_code_alternatif,
indicateur,
valeur,
stade)
Dans un second temps, l’indicateur de la biomasse est calculé par stade (juv, ad et ind) et les diffréentes données sont regroupées dans un tableau global relatif à l’indicateur biomasse : ope_biomasse.
ope_biomasse <- ope_biomasse %>%
bind_rows(ope_biomasse %>%
filter(stade %in% c("ad", "juv")) %>%
group_by(indicateur,
ope_id,
esp_code_alternatif) %>%
summarise(stade = "ind", valeur = sum(valeur)))
Les densités surfaciques de chacune des espèces sur chaque opération de pêche (ope_id) sont calculées à partir du jeu de données mei_ope_selection. Dans un premier temps, l’ensemble des stades sont gardés. Il est nécessaire d’ajouter les données de surfaces prospectées lors de l’opération de pêche afin de calculer les densités surfaciques : les valeurs d’ope_surface_calculee sont ajoutés au dataframe principal.
mei_ope_selection <- mei_ope_selection %>%
left_join (y=operation %>%
select (ope_id,
ope_surface_calculee, # Ajout surfaces échantillonnées
passage$pas_numero))
La fonction calcul_densite_surface calcule les densités surfaciques par opération, espèce et par stade : les résultats sont renvoyés dans le jeu de données ope_densite_surf.
ope_densite_surf <- calcul_densite_surface(mei_ope_selection,
ope_surface_calculee,
ope_id,
esp_code_alternatif,
stade,
mei_id)
Les densités volumiques de chacune des espèces sur chaque opération de pêche (ope_id) sont calculées à partir du jeu de données mei_ope_selection. Dans un premier temps, l’ensemble des stades sont gardés. Il est nécessaire d’ajouter les données de profondeur liées à l’opération de pêche afin de calculer les densités volumiques : les valeurs du dataframe ope_selection_param_env issu du script 04_pre_traitement_env sont ajoutées. Nous y sélectionnons le paramètre de la profondeur et l’incluons dans notre jeu de données ope_param_profondeur.
ope_param_profondeur <- ope_selection_param_env %>% # Création d'un df contenant les valeurs de profondeur
filter(parametre == "profondeur") %>%
select(ope_id,
valeur) %>%
rename(profondeur=valeur) %>%
distinct()
Nous réalisons par la suite le calcul des densités volumiques par opération pour chaque espèce ainsi que pour tous les stades (ad, juv et ind). Pour cela, nous utilisons également les valeurs de densités surfaciques précédemment calculées.
densite_surf <- ope_densite_surf %>% # Utilisation des données de densités surfaciques précédemment calculées
rename(valeur_ds = valeur)
ope_densite_vol<- left_join(ope_param_profondeur, densite_surf, by = "ope_id") %>%
mutate(valeur = valeur_ds /profondeur) %>%
ungroup() %>%
mutate(indicateur = "densite_volumique") %>%
select(ope_id,
esp_code_alternatif,
indicateur,
valeur,
stade)
Le pourcentage de juvéniles de chacune des espèces pour chaque opération de pêche (ope_id)est calculé à partir du jeu de données mei_ope_selection. Nous utilisons les valeurs d’effectifs précèdemment calculées dans ope_effectif.
ope_pc_juv <- ope_effectif %>%
mutate(indicateur = "pourcentage_juveniles")
Le calcul de pourcentage de juvéniles par opération est effectué. Les résultats sont stockés dans le jeu de données ope_pc_juv.
ope_pc_juv <- ope_pc_juv %>%
ungroup() %>%
complete(ope_id,
esp_code_alternatif,
stade,
indicateur,
fill = list(valeur = 0)) %>%
group_by(ope_id,
esp_code_alternatif) %>%
mutate(valeur = (valeur [stade == "juv"] / valeur [stade == "ind"])*100) %>%
filter(stade == "ind",
!is.nan(valeur))
Il s’agit ici de calculer des indicateurs simples spécifiques aux mesures individuelles des poissons. L’ensemble de ces paramètres tournerons autour de la longueur médiane des poissons. Il est donc nécessaire de garder à l’esprit que ces indicateurs reposeront sur des données de tailles estimées par un modèle (cf Script 04_pre_traitement_ope_esp). Il est donc nécessaire de rester critique face aux résultats issus de ces indicateurs.
Nous réalisons ainsi le calcul des longueurs médianes des individus par opération. La fonction calcul_50_percentile a été créée afin de calculer cet indicateur par opération / espèce et stade : les résultats de cette fonction sont renvoyés dans le jeu de données ope_lm.
ope_lm <- calcul_50_percentile(mei_ope_selection,
mei_taille,
ope_id,
esp_code_alternatif,
stade)
Calcul des écarts interquartiles des tailles des individus par opération : Création de la fonction “calcul_ecart_interquartile” :
Le calcul des écarts interquartiles des longueurs médianes des individus par opération est effectué. La fonction calcul_ecart_inter a été créée afin de calculer cet indicateur par opération / espèce et stade : les résultats de cette fonction sont renvoyés dans le jeu de données ope_ecart_inter.
ope_ecart_inter <- calcul_ecart_inter(mei_ope_selection,
mei_taille,
ope_id,
esp_code_alternatif,
stade)
Le calcul des percentiles 25 et 75 des longueurs médianes des individus par opération est effectué. Les fonctions calcul_p25 et calcul_p75 ont été créées afin de calculer ces indicateurs par opération / espèce et stade : les résultats de cette fonction sont renvoyés dans le jeu de données ope_p25 et ope_p75.
ope_p25 <- calcul_p25(mei_ope_selection, # Calcul des percentiles 25 des longueurs médianes
mei_taille,
ope_id,
esp_code_alternatif,
stade)
ope_p75 <- calcul_p75(mei_ope_selection, # Calcul des percentiles 75 des longueurs médianes
mei_taille,
ope_id,
esp_code_alternatif,
stade)
L’ensemble des indicateurs précèdemment calculés à l’opération sont regroupés dans le dataframe ope_indicateur.
# Création du tableau pré-final avec tous les indicateurs calculés
ope_indicateur <- rbind(ope_lm,
ope_densite_surf,
ope_densite_vol,
ope_pc_juv,
ope_biomasse,
ope_effectif)
Les années d’opérations ainsi que les identifiants des points de prélèvements sont ajoutés au tableau ope_indicateur.
# Ajout des années d'opération au site et à l'année (pop_id) et (ope_date)
ope_indicateur <- ope_indicateur %>%
ungroup() %>%
left_join(y=operation %>%
select(ope_id,
pop_id= ope_pop_id,
ope_date)) %>%
mef_ajouter_ope_date() %>%
select(ope_id,
esp_code_alternatif,
indicateur,
valeur,
stade,
pop_id,
annee)
Nous visualisons le dataframe final ope_indicateur regroupant donc l’ensemble des indicateurs calculés à l’opération (par espèces et par stades). Il s’agit de notre tableau de bord final à l’échelle des opérations.
#Représentation graphique du tableau
ope_indicateur%>%
DT::datatable(rownames = FALSE)
Nous sauvegardons dans un fichier .rda le jeu de données ope_indicateur qui nous servira pour des analyses futures.
save(ope_indicateur,
mei_ope_selection,
ope_effectif,
file = "../processed_data/assemblage_tab_par_ope.rda")
Nous sauvegardons à part les données d’effectifs et de densités surfaciques :
save(ope_effectif_absences,
ope_densite_surf,
file = "../processed_data/donnees_densite_eff_abs.rda")
Irz, P., Mondy, C., Richard, B. Bonnafoux, L. (2024). aspe: An R package to analyse and visualise river fish data in France. R package version 0.4.1, https://github.com/PascalIrz/aspe/